#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
  char command[51] = {0};
  char* versionnr = "0.8b";
  int background;
  while(1) 
  {
    char* currentDir = (char*)get_current_dir_name();
    printf("%s$ ", currentDir);
    free(currentDir);
    //scanf("%50s", command); Scanf liest nur bis zum nächsten Whitespace
    fgets(command, sizeof(command), stdin);
    
    command[strlen(command)-1] = '\0';
    if(strcmp(command, "quit") == 0) {
      return 0; 
    } else if(strcmp(command, "version") == 0){
      printf("Daveo Ltd. v %s\n", versionnr);
    } else if(strcmp(command, "help") == 0){
      printf("Befehle: \n\
      quit: Beenden der HAW-Shell\n\
      version: gibt die aktuelle Versions-Nummer der Shell zusammen mit dem Autor aus\n\
      help: siehe help\n\
      /[Pfad]: Verzeichnis wechseln\n");
    } else if(command[0] == '/'){
      char* directory = command;
      chdir(directory);
      setenv("PWD", directory, 1);
    } else if(command[0] == 'c' && command [1] == 'd' && command[2] == ' '){
      char* directory = command + 3;
      chdir(directory);
      setenv("PWD", directory, 1);
    } else if(strlen(command) == 0) {
      continue;
    } else {
      //system(command); 
      int pid = fork();
      background = 0;
      if (command[strlen(command)-1] == '&') {
        background = 1;
        command[strlen(command)-1] = '\0'; //&-Zeichen abschneiden
      }
      if (pid < 0) { //Fehler
        printf("Fehler beim Forken. Fehlernr: %d\n", pid);
      } else if (pid == 0) { //Child
        execlp(command,command,NULL);
        printf("Das Programm '%s' konnte nicht gestartet werden!\n", command);
        return 0;
      } else if (pid > 0) { //Parent
          if (background) 
            printf("Job[%d] erfolgreich gestartet!\n", pid);
          else {
            int temp;
            waitpid(pid, &temp, NULL);
        }
      }
    }
  }
  
 return 0; 
}
